﻿using System;
using MugenInjection.Interception.Interface;

namespace MugenInjection.Interception.Delegates
{
    public delegate TValue GetPropertyDelegate<TValue, in TTarget>(TTarget target, Func<TValue> getGetValue, IPropertyGetInterceptor interceptor);

    public delegate TValue SetPropertyDelegate<TValue, in TTarget>(TTarget target, TValue setValue, IPropertySetInterceptor interceptor);

    public delegate void InvokeVoidMethodDelegate<in TTarget>(TTarget target, Action invokeOriginal, IMethodInterceptor methodInterceptor);

    public delegate TValue InvokeMethodDelegate<TValue, in TTarget>(TTarget target, Func<TValue> invokeOriginal, IMethodInterceptor methodInterceptor);
}